Skip to content

fix(kv-store): make LMDB clear and drop operations atomic across sub-databases#21539

Merged
alexghr merged 1 commit intomerge-train/spartanfrom
fix/130-lmdb-non-atomic-clear
Mar 16, 2026
Merged

fix(kv-store): make LMDB clear and drop operations atomic across sub-databases#21539
alexghr merged 1 commit intomerge-train/spartanfrom
fix/130-lmdb-non-atomic-clear

Conversation

@Maddiaa0
Copy link
Member

@Maddiaa0 Maddiaa0 commented Mar 13, 2026

part of #21514

Summary

  • Problem: AztecLmdbStore.clear() and drop() called their respective operations on each sub-database (#data, #multiMapData, #rootDb) sequentially without a wrapping transaction. A crash between operations could leave the store in an inconsistent state (some sub-DBs cleared, others not).
  • Fix: Wrap all sub-database operations within a single this.#rootDb.transaction() call using synchronous variants (clearSync() / dropSync()) so they execute atomically.
  • Tests: Added comprehensive test suite covering clear (maps, multimaps, singletons, counters, sets), drop, and delete operations.

Changes

  • yarn-project/kv-store/src/lmdb/store.ts: clear() now uses clearSync() inside a transaction; drop() now uses dropSync() inside a transaction.
  • yarn-project/kv-store/src/lmdb/store.test.ts: New test file with 7 test cases.

Test plan

  • New unit tests for clear(), drop(), and delete() operations
  • Existing kv-store tests pass: yarn workspace @aztec/kv-store test

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

@Maddiaa0 Maddiaa0 changed the base branch from next to merge-train/spartan March 13, 2026 17:41
@Maddiaa0 Maddiaa0 force-pushed the fix/130-lmdb-non-atomic-clear branch from 5f606aa to 53392a6 Compare March 13, 2026 17:43
…databases

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@Maddiaa0 Maddiaa0 force-pushed the fix/130-lmdb-non-atomic-clear branch from 53392a6 to fba3d29 Compare March 13, 2026 18:18
@alexghr alexghr merged commit 3e1709e into merge-train/spartan Mar 16, 2026
11 checks passed
@alexghr alexghr deleted the fix/130-lmdb-non-atomic-clear branch March 16, 2026 08:45
github-merge-queue bot pushed a commit that referenced this pull request Mar 16, 2026
BEGIN_COMMIT_OVERRIDE
feat: add ETHEREUM_HTTP_TIMEOUT_MS env var for viem HTTP transport
(#20919)
fix(archiver): filter tagged log queries by block number (#21388)
fix(node): handle slot zero in getL2ToL1Messages (#21386)
feat(sequencer): redistribute checkpoint budget evenly across remaining
blocks (#21378)
fix: fall back to package.json for CLI version detection (#21382)
chore: Removed multiplier config (#21412)
chore: Removed default snapshot url config (#21413)
chore: Read tx filestores from network config (#21416)
fix(node): check world state against requested block hash (#21385)
feat(p2p): use l2 priority fee only for tx priority (#21420)
feat(p2p): reject and evict txs with insufficient max fee per gas
(#21281)
revert "feat(p2p): reject and evict txs with insufficient max fee per
gas (#21281)" (#21432)
chore: Reduce log spam (#21436)
fix(tx): reject txs with invalid setup when unprotecting (#21224)
fix: orchestrator enqueue yield (#21286)
chore(builder): check archive tree next leaf index during block building
(#21457)
fix: scenario deployment (#21428)
chore: add claude skill to read network-logs (#21495)
chore: update claude network-logs skill (#21523)
feat(rpc): add package version to RPC response headers (#21526)
chore(prover): silence "epoch to prove" debug logs (#21527)
chore(sequencer): do not log blob data (#21530)
fix: dependabot alerts (#21531)
docs(p2p): nicer READMEs (#21456)
fix(archiver): guard getL1ToL2Messages against incomplete message sync
(#21494)
fix(sequencer): await syncing proposed block to archiver (#21554)
feat(ethereum): check VK tree root and protocol contracts hash in rollup
compatibility (#21537)
fix: marking peer as dumb on failed responses (#21316)
fix(kv-store): make LMDB clear and drop operations atomic across
sub-databases (#21539)
feat(world-state): add blockHash verification to syncImmediate (#21556)
chore(monitor): print out l2 fees components (#21559)
chore: rm faucet (#21538)
chore: remove old merkle trees (#21577)
feat: Implement commit all and revert all for world state checkpoints
(#21532)
chore: skip flaky browser acir tests in CI (#21596)
fix: Better detection for epoch prune (#21478)
chore: logging (#21604)
fix: Don't update state if we failed to execute sufficient transactions
(#21443)
END_COMMIT_OVERRIDE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants